طراحی هایی که از روش های معمول آدرس دهی حافظه به عنوان استقلال داده ای استفاده می کنند (Data Dependency) را ماشین های گردش داده ای ایستا می گویند. این ماشین ها اجازه نمیدهند تا چند نمونه (instance) از یک رویه(routine) به صورت همزمان ساخته و اجرا شود.دلیل این امر این است که بچسب ساده(simple tag) نمیتواند میان آنان تفاوت قائل شود.طراحی هایی که از Content Addressable Memory(CAM) استفاده می کنند را ماشین های با گردش داده پویا می گویند. این برنامه ها از برچسب هایی استفاده می کنند که پردازش موازی را تسهیل می کند.
به صورت عادی کامپایلر ها(compilers) متن اصلی برنامه(source code)را آنالیز می کنند تا وابستگی های داده ای میان دستورات را برای ساماندهی بهتر ترتیب دستورات در فایل باینری خروجی بیابد. دستورات به صورت ترتیبی ساماندهی شده اند ولی اطلاعات مربوط به وابستگی در فایل های باینری ذخیره نمیشوند. فایل های باینری که برای ماشین های گردش داده ای ذخیره می شوند، حاوی این اطلاعات وابستگی هستند. کامپایلر برای نگه داری این اطلاعات به جای استفاده از متغیرها از از بچسب های یکتایی استفاده می کند. با استفاده از این روش برچسب گذاری به قطعه کد غیر مستقل اجازه داده می شود که در پردازش موازی بدون ترتیب (out of order) اجرا شود.برنامه ها در CAM کامپیوتر جریان داده پویا ذخیره می شوند. هنگامی که همه عملونده های یک دستورالعمل فعال می شوند(یعنی خروجی یک دستورالعمل قبلی ویا یک ورودی از کاربر)، دستور به عنوان دستور آماده علامت گذاری می شود. این عمل توسط یک بخش اجرایی(execution unit) انجام می شود. به این عمل فعالسازی(activation) یا شعله ور کردن(firing)دستورالعمل می گویند. به محض این که عملیات بخش اجرایی بر روی یک دستور خاتمه می یابد، خروجی آن در CAM ذخیره می شود(به همراه برچسب آن). هر دستوری که به که به داده خاصی وابسته باشد(این امر با بررسی مقدار برچسب شناسایی می شود) و سپس به عنوان آماده برای اجرا برچسب می خورد. در این حالت دستورات بعدی با ترتیب درست اجرا می شوندو از حالت مسابقه ای پرهیز می شود(race condition). این ترتیب اجرا احتمالاً با ترتیب مورد انتظار نوشته شده توسط انسان متفاوت خواهد بود.
یک دستورالعمل به همراه عملوندهای مورد نیاز آن، به شکل یک بسته به بخش اجرایی فرستاده می شود، که به آن instruction token گفته می شود. به صورت مشابه، داده خروجی به عوان token به CAM بازگردانده می شود. این بسته سازی دستورات و نتایج اجازه می دهد تادستورات در پردازش موازی بتوانند در ابعاد بزرگ اجرا شوند. شبکه های جریان داده وظیفه رساندن دستورات به شکل token را به بخش اجرایی و برعکس به CAM را بر عهده دارند. کاملاً برعکس معماری فون نیومن، token ها به شکل پایدار در حافظه ذخیره نمیشوند، بلکه آن ها پیام های موقتی هستند که در زمان تبادل دستورات ذخیره می شوند.
تحقیقات هنوز نتوانسته اند به مسائل مربوط به موارد زیر هیچگاه فائق بیایند:
- کارایی پخش کردن Data Token ها در سیستم های موازی بسیار حجیم.
- کارایی مخابره instruction tokenها در سیستم های موازی حجیم.
- درست کردن CAM هایی با بزرگی مناسب برای نگهداری همه وابستگی ها در سیستم های حقیقی.
با این وجود، از دهه ۱۹۹۰ اجرای خارج از روال(out-of-order execution) تبدیل به یک مشکل اساسی در پارادایم محاسباتی شده است که یک روش گردش داده ای محدود می باشد. در این پارادایم، یک ایده به نام پنجره اجرایی(execution window)معرفی شده است. این پنجره های اجرایی از همان ترتیب معماری فون نیومن پیروی می کنند، با این حال داده ها در داخل این پنجره ها اجازه دارند تا با توجه به وابستگی ها اجرا و خاتمه یابند. این روش در CPUهایی که به روش پویا به برچسب گذاری می پردازند پیاده سازی شده است. پیچیدگی منطقی پیگیری اثر داده های وابسته به شکل پویا OoO CPUرا به تعدادی بخش های اجرایی محدود می کند و اندازه سایز پنجره ها را به رنج ۳۲تا ۲۰۰ دستور کوچک می کند.این مقدرا بسیار کوچکتر از مقدر آن در سیستم های تمام گردش داده ای است.
نظرات شما عزیزان: